package com.manjusaka.structure7.Adaptor;

/**
 * 适配器模式
 * 类适配器
 * Created by manjusaka on 2017/7/4.
 * 适配器模式的三种     1：类适配器   2：对象适配器    3：缺省适配器
 */
public class ClassAdapter {

    public static void main(String[] args) {
        Target Target = new Adapter1();
        Target.run();
        Target Target2 = new Adapter2(new Adaptee());
        Target2.run();
    }
}

/**
 * 目标的接口
 */
interface Target {
    void run();

    void eat();

    void jump();
}

/**
 * 要去适配目标的类，他们这两个都是不可改变的，所以直接实现接口是不对的
 */
class Adaptee {
    public void runAdaptee() {
        //跑的实现
        System.out.println("********适配器模式********");
    }
}

/**
 * 中间的适配器类
 */
class Adapter1 extends Adaptee implements Target {
    /**
     * 适配跑的接口，但是其他的没有实现
     */
    public void run() {
        super.runAdaptee();
    }

    /**
     * 剩余的这两个如何实现，那就是多继承来拓展适配这的功能，让他拥有多项技能
     */
    public void eat() {
    }

    public void jump() {
    }
}

/**
 * 维持一个类的引用是比类适配器更灵活的方式来处理适配
 */
class Adapter2 implements Target {
    private Adaptee Adaptee;

    public Adapter2(Adaptee adaptee) {
        this.Adaptee = adaptee;
    }

    /**
     * 适配跑的接口，但是其他的没有实现
     */
    public void run() {
        Adaptee.runAdaptee();
    }

    /**
     * 剩余的这两个如何实现，那就是多继承来拓展适配这的功能，让他拥有多项技能
     */
    public void eat() {
    }

    public void jump() {
    }
}

